package com.jiumi.system.util;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest;
import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;
import com.jiumi.common.config.AliConfig;
import org.springframework.stereotype.Component;

import java.util.HashMap;

/**
 * @author lun.zhang
 * @create 2023/6/10 18:04
 */

@Component
public class AliYunUtil {
    public static   HashMap<String, String>   getStsInfo() throws ClientException {
        // STS接入地址，例如sts.cn-hangzhou.aliyuncs.com。
        String endpoint = AliConfig.getSTSEndpoint();
        // 填写步骤1生成的RAM用户访问密钥AccessKey ID和AccessKey Secret。
        String accessKeyId = AliConfig.getStsAccessKeyId();
        String accessKeySecret = AliConfig.getStsAccessKeySecret();
        // 填写步骤3获取的角色ARN。
        String roleArn = AliConfig.getStsRoleArn();
        // 自定义角色会话名称，用来区分不同的令牌，例如可填写为SessionTest。
        String roleSessionName = AliConfig.getStsRoleSessionName();
        String regionId = AliConfig.getStsRegionId();
        // 如果policy为空，则用户将获得该角色下所有权限。
        String policy = AliConfig.getPolicy();
        // 设置临时访问凭证的有效时间为3600秒。
        Long durationSeconds = 3600L;
        IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);
        final AssumeRoleRequest request = new AssumeRoleRequest();
        request.setMethod(MethodType.POST);
//        // 适用于Java SDK 3.12.0及以上版本。
//        request.setSysMethod(MethodType.POST);
        // 适用于Java SDK 3.12.0以下版本。
        //request.setMethod(MethodType.POST);
        request.setRoleArn(roleArn);
        request.setRoleSessionName(roleSessionName);
        request.setPolicy(policy);
        request.setDurationSeconds(durationSeconds);
        final AssumeRoleResponse response = client.getAcsResponse(request);
        HashMap<String, String> map = new HashMap<>();
        map.put("AccessKeyId",response.getCredentials().getAccessKeyId());
        map.put("AccessKeySecret",response.getCredentials().getAccessKeySecret());
        map.put("SecurityToken",response.getCredentials().getSecurityToken());
        map.put("BucketName",AliConfig.getBucket());
        map.put("OssRegion",AliConfig.getOssRegion());
        return map;
    }
}
